package com.hejjon.timer.test;

import java.util.Timer;
import java.util.TimerTask;

/**
 *
 * 测试 定时器 cancel 和 任务 cancel
 * Created by caoshi at 20:05 2021-08-15
 */
public class TimerTest7 {

    public static void test7() {
        Timer timer = new Timer();
        class MyTimerTask extends TimerTask {

            @Override
            public void run() {
                System.out.println("测试 cancel 1");
                this.cancel();
            }
        }



        for (int i = 0; i < 100; i++) {
            MyTimerTask mt = new MyTimerTask();
            timer.schedule(mt, TimerTest1.getDelayTime(1), 1000);
            mt.cancel();        // 清除任务
        }

        System.out.println("此时可以移除取消的任务个数为100个" + timer.purge());


        // timer.cancel() 即停止timer, 并且丢弃所有绑定的任务, 但不干预当前正在执行的任务.
        // 一旦timer 停止了, 那么其执行线程将会优雅终止, 并且该 timer 不可以再绑定task任务了
//        timer.cancel();

//        timer.schedule(new TimerTask() {
//            @Override
//            public void run() {
//                System.out.println("timer 取消后看是否还会执行");
//            }
//        }, TimerTest1.getDelayTime(5), 1000);


        for (int i = 0; i < 100; i++) {
            MyTimerTask mt = new MyTimerTask();
            mt.cancel();
            // 任务被取消了 IllegalStateException: Task already scheduled or cancelled
            timer.schedule(mt, TimerTest1.getDelayTime(1), 1000);
        }


    }


}
